#pragma once 

/* 好友关系表的ODB映射 */

#include <string>
#include <cstddef> // std::size_t
#include <odb/nullable.hxx>
#include <odb/core.hxx>

namespace ChatSystem
{
    #pragma db object table("relation")
    //好友关系表映射的对象
    class Relation
    {
    public:
        Relation(){}
        ~Relation(){}

        Relation(const std::string& user_id, const std::string& friend_id)
        :_user_id(user_id), _peer_id(friend_id)
        {}

        //获取用户ID
        std::string user_id() const
        {
            return _user_id;
        }
        //获取用户ID
        std::string user_id()
        {
            return _user_id;
        }
        //修改用户ID
        void user_id(const std::string& val)
        {
            _user_id = val;
        }

        //获取好友ID
        std::string peer_id() const
        {
            return _peer_id;
        }
        //获取好友ID
        std::string peer_id()
        {
            return _peer_id;
        }
        //修改好友ID
        void peer_id(const std::string& val)
        {
            _peer_id = val;
        }

    private:
        friend class odb::access;   //建立友元关系，以便odb框架来访问我们的私有成员
        
        #pragma db id auto
        unsigned long _id;  //主键---这个只能保证同一主机上的用户之间不能重复，而不能保证不同主机数据库上id的唯一性

        #pragma db type("varchar(64)") index
        std::string _user_id;   //用户ID，这个是可以重复的，一个用户会有多个好友，所以在这个表中会有多个好友关系；创建索引是为了方便搜索
        #pragma db type("varchar(64)") 
        std::string _peer_id;   //好友ID
    };

}

//odb 编译：odb -d mysql --generate-query --generate-schema --profile boost/date-time relation.hxx